import Cookies from 'js-cookie'

const app = {
  state: {
    sidebar: {
      opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
      withoutAnimation: false
    },
    device: 'desktop',
    language: Cookies.get('language') || 'zh',
    size: Cookies.get('size') || 'medium',
    isLoading: false,
    loadingText: '加载中...',
    menu: null,
    cacheData: sessionStorage.getItem('$_cacheData') || null,
    searchData: sessionStorage.getItem('$_searchData') || null,
    page: sessionStorage.getItem('$_page') || null
  },
  mutations: {
    PAGE: (state, queryList = null) => {
      if (queryList) {
        state.cacheData = null
        const data = JSON.stringify(queryList)
        state.searchData = data
        sessionStorage.setItem('$_page', data)
      } else {
        state.searchData = null
        sessionStorage.removeItem('$_page')
      }
    },
    SEARCH_DATA: (state, queryList = null) => {
      if (queryList) {
        state.cacheData = null
        const data = JSON.stringify(queryList)
        state.searchData = data
        sessionStorage.setItem('$_searchData', data)
      } else {
        state.searchData = null
        sessionStorage.removeItem('$_searchData')
      }
    },
    CACHE_DATA: (state, data = null) => {
      if (data) {
        state.cacheData = null
        data = JSON.stringify(data)
        state.cacheData = data
        sessionStorage.setItem('$_cacheData', data)
      } else {
        state.cacheData = null
        sessionStorage.removeItem('$_cacheData')
      }
    },
    SHOW_LOADING: (state, text = '加载中...') => {
      state.isLoading = true
      state.loadingText = text
    },
    HIDE_LOADING: state => {
      state.isLoading = false
      state.loadingText = ''
    },
    SET_MENU: (state, menu) => {
      state.menu = menu
    },
    TOGGLE_SIDEBAR: state => {
      state.sidebar.opened = !state.sidebar.opened
      state.sidebar.withoutAnimation = false
      if (state.sidebar.opened) {
        Cookies.set('sidebarStatus', 1)
      } else {
        Cookies.set('sidebarStatus', 0)
      }
    },
    CLOSE_SIDEBAR: (state, withoutAnimation) => {
      Cookies.set('sidebarStatus', 0)
      state.sidebar.opened = false
      state.sidebar.withoutAnimation = withoutAnimation
    },
    TOGGLE_DEVICE: (state, device) => {
      state.device = device
    },
    SET_LANGUAGE: (state, language) => {
      state.language = language
      Cookies.set('language', language)
    },
    SET_SIZE: (state, size) => {
      state.size = size
      Cookies.set('size', size)
    }
  },
  actions: {
    toggleSideBar({ commit }) {
      commit('TOGGLE_SIDEBAR')
    },
    setMenu({ commit }, menu) {
      commit('SET_MENU', menu)
    },
    closeSideBar({ commit }, { withoutAnimation }) {
      commit('CLOSE_SIDEBAR', withoutAnimation)
    },
    toggleDevice({ commit }, device) {
      commit('TOGGLE_DEVICE', device)
    },
    setLanguage({ commit }, language) {
      commit('SET_LANGUAGE', language)
    },
    setSize({ commit }, size) {
      commit('SET_SIZE', size)
    },
    showLoading({ commit }) {
      commit('SHOW_LOADING')
    },
    hideLoading({ commit }) {
      commit('HIDE_LOADING')
    },
    cacheData({ commit }, data) {
      commit('CACHE_DATA', data)
    },
    data({ commit }, data) {
      commit('CACHE_DATA', data)
    },
    clearData({ commit }, data = null) {
      commit('CACHE_DATA', data)
    },
    clearSearch({ commit }, data = null) {
      commit('SEARCH_DATA', data)
    },
    searchData({ commit }, data) {
      commit('SEARCH_DATA', data)
    },
    page({ commit }, data = null) {
      commit('PAGE', data)
    }
  }
}

export default app
